// 权限表单提交，为了能控制表单提交数量使用主动提交
// 新建权限
$("#generate_form_submit").click(function () {
    // 把当前页面上的error信息清空
    $("#generate_form table span").text("")
    let data = {
        // 获取csrf type类型 以及formset信息
        "csrfmiddlewaretoken": $("#generate_form input[name='csrfmiddlewaretoken']").val(),
        "type": "generate",
        "form-TOTAL_FORMS": $("#generate_form #id_form-TOTAL_FORMS").val(),
        "form-INITIAL_FORMS": $("#generate_form #id_form-INITIAL_FORMS").val(),
        "form-MIN_NUM_FORMS": $("#generate_form #id_form-MIN_NUM_FORMS").val(),
        "form-MAX_NUM_FORMS": $("#generate_form #id_form-MAX_NUM_FORMS").val(),
    }
    // 定义变量
    // tdip 输入框对象(td input)  name 输入框名字属性  value 输入框输入的数值
    let tdip, name, value;
    // 定义有多少合法的form项
    let count = 0;
    // 新key与旧key的对应关系，为以后出现错误在对应输入框显示准备
    let relation = {};
    // 循环table 每一行是一个form
    $("#generate_form table tr:gt(0)").each(function (tr_index) {
        // 定义临时字典
        let td_dict = {};
        // 循环每一行的每一个输入框
        // 不是第一个输入框进行处理，第一个输入框是生成的列表顺序，忽略不计
        $(this).children("td:gt(0)").each(function (td_index) {
            // 获取输入值
            if ($(this).find("input").length > 0) {
                tdip = $(this).children("input")
            } else if ($(this).find("select").length > 0) {
                tdip = $(this).children("select")
            } else {
                td_dict = {};
                return false;
            }
            // 获取name属性
            name = tdip.attr("name")
            // 输入框数值
            value = tdip.val().trim()
            // 如果是title字段且没有数值，说明不想保存这个form
            if ((name.indexOf("title") !== -1) && !value) {
                td_dict = {};
                // 退出整体each循环
                return false;
            }
            // 没有退出则把当前的信息进行保存
            td_dict[name] = value
        });
        // 如果有td_dict 说明需要保存这个form
        if (Object.keys(td_dict).length !== 0) {
            for (name in td_dict) {
                // 保存内容到data里面并修改name
                data[name.replace(/\d+/, count)] = td_dict[name];
                // 记录关联关系
                relation[count] = name.substring(0, name.lastIndexOf("-"))
            }
            // 记录几个form需要提交
            count += 1
        }
    });
    // 没有有效数据，直接返回信息，不请求接口
    if (count === 0) {
        swal({
            title: "没有数据！",
            text: "没有检测到填写数据，请填写数据后再进行提交",
            icon: "info",
            button: " 确 定 ",
        });
        return false;
    }
    // 需要提交 form 数量
    data["form-TOTAL_FORMS"] = count.toString()
    data["form-INITIAL_FORMS"] = count.toString()
    // 当前网址，向当前网址提交数据
    // let url = window.location.href;
    // url = url.split("?")[0]
    let url = $("#generate_form").attr("action")
    $.ajax({
        url: url,
        type: "POST",
        data: data,
        success: function (data) {
            if (data["status"] === 0) {
                // 成功刷新页面。可以手动更新页面，麻烦收益不高
                window.location.reload();
            } else {
                // 数据有误，遍历数据错误 i 为目前遍历的第几个form
                for (let i = 0; i < data["data"]["formset"].length; i++) {
                    let formset = data["data"]["formset"][i]
                    for (let count = 0; count < Object.keys(formset).length; count++) {
                        let error = formset[count]["error"];
                        if (error.length > 0) {
                            error = error[0];
                            // 对应位置显示错误信息
                            $("#generate_form table #id_" + relation[i] + "-" + formset[count]["name"]).next("span").text(error)
                        }
                    }
                }
            }
        },
        error: function (data) {
            console.log(data);
        }
    });
})

// 权限删除按钮点击
$("#permission_delete_table a").click(function () {
    swal({
        title: "Are you sure?",
        text: "Once deleted, you will not be able to recover this permission!",
        icon: "warning",
        buttons: true,
        dangerMode: true,
    }).then((willDelete) => {
        if (willDelete) {
            let key = $(this).parents("tr").children("td:eq(1)").text();
            let url = $(this).attr("href");
            let data = {
                // 获取csrf token
                "csrfmiddlewaretoken": $("input[name='csrfmiddlewaretoken']").val(),
                "key": [key],
            }
            $.ajax({
                url: url,
                type: "POST",
                data: data,
                dataType: 'json',
                traditional: true,
                success: (data) => {
                    if (data['status'] === 0) {
                        swal({
                            title: "删除成功！",
                            text: "此权限已经成功删除",
                            icon: "success",
                            button: " 确 定 ",
                        });
                        // 删除节点，前端页面进行删除
                        $(this).parents("tr").remove()
                        // 重新理顺每行序号
                        let count = 1
                        $("#permission_delete_table tr:gt(0)").each(function (tr_index) {
                            $(this).children("td:first").text(count);
                            count += 1
                        })
                    } else {
                        swal({
                            title: "删除失败！",
                            text: "权限删除失败，失败原因是: " + data['msg'],
                            icon: "warning",
                            button: " 确 定 ",
                        });
                    }
                },
                error: function (data) {
                    console.log(data);
                }
            });
        }
    });
    return false;
})

// 更新权限
$("#update_form_submit").click(function () {
    // 把当前页面上的error信息清空
    $("#update_form table span").text("")
    data = {
        // 获取csrf type类型 以及formset信息
        "csrfmiddlewaretoken": $("#update_form input[name='csrfmiddlewaretoken']").val(),
        "type": "update",
        "form-TOTAL_FORMS": $("#update_form #id_form-TOTAL_FORMS").val(),
        "form-INITIAL_FORMS": $("#update_form #id_form-INITIAL_FORMS").val(),
        "form-MIN_NUM_FORMS": $("#update_form #id_form-MIN_NUM_FORMS").val(),
        "form-MAX_NUM_FORMS": $("#update_form #id_form-MAX_NUM_FORMS").val(),
    }
    // 定义变量
    // tdip 输入框对象(td input)  name 输入框名字属性  value 输入框输入的数值
    let tdip, name, value;
    // 定义有多少合法的form项
    let count = 0;
    // 新key与旧key的对应关系，为以后出现错误在对应输入框显示准备
    let relation = {};
    // 循环table 每一行是一个form
    $("#update_form table tr:gt(0)").each(function (tr_index) {
        // 定义临时字典
        let td_dict = {};
        // 循环每一行的每一个输入框
        $(this).children("td").each(function (td_index) {
            // 不是第一个输入框进行处理，第一个输入框是生成的列表顺序，忽略不计
            if (td_index !== 0) {
                // 获取输入值
                // 获取输入值
                if ($(this).find("input").length > 0) {
                    tdip = $(this).children("input")
                } else if ($(this).find("select").length > 0) {
                    tdip = $(this).children("select")
                } else {
                    return;
                }
                // 获取name属性
                name = tdip.attr("name")
                // 输入框数值
                value = tdip.val().trim()
                // 保存内容到data里面
                data[name] = value;
            }
        });
    })
    // 提交数据网址
    let url = $("#update_form").attr("action")
    $.ajax({
        url: url,
        type: "POST",
        data: data,
        success: function (data) {
            if (data["status"] === 0) {
                // 成功刷新页面。可以手动更新页面，麻烦收益不高
                window.location.reload();
            } else {
                // 数据有误，遍历数据错误 i 为目前遍历的第几个form
                for (let i = 0; i < data["data"]["formset"].length; i++) {
                    let formset = data["data"]["formset"][i]
                    for (let count = 0; count < Object.keys(formset).length; count++) {
                        let error = formset[count]["error"];
                        if (error.length > 0) {
                            error = error[0];
                            // 对应位置显示错误信息
                            $("#update_form table #id_form-" + i + "-" + formset[count]["name"]).next("span").text(error)
                        }
                    }
                }
            }
        },
        error: function (data) {
            console.log(data);
        }
    });
})
